using WL.Think.Abp.Dto;

namespace WL.Think.Abp.Services;

/// <summary>
/// 基础的分类服务
/// </summary>
/// <typeparam name="TGetOutputDto">返回对象</typeparam>
/// <typeparam name="TGetListInput">分页查询对象</typeparam>
/// <typeparam name="TCreateInput">创建对象</typeparam>
/// <typeparam name="TUpdateInput">更新对象</typeparam>
public interface IBaseCategoryAppService<TGetOutputDto, TGetListInput, TCreateInput, TUpdateInput> : 
    IThinkAppService<TGetOutputDto, TGetListInput, TCreateInput, TUpdateInput>
    where TGetOutputDto: BaseCategoryDto<TGetOutputDto>
    where TGetListInput: BasePagedDto
    where TCreateInput: BaseCategoryCreateUpdateDto
    where TUpdateInput: BaseCategoryCreateUpdateDto
{
    /// <summary>
    /// 获取树形结构的模型分类列表
    /// </summary>
    /// <param name="parentId">上级ID</param>
    /// <returns></returns>
    public Task<List<TGetOutputDto>> GetTreeAsync(Guid? parentId = null);

    /// <summary>
    /// 获取激活树形分类列表
    /// </summary>
    /// <param name="parentId">上级ID</param>
    /// <returns></returns>
    public Task<List<TGetOutputDto>> GetActiveTreeAsync(Guid? parentId = null);

    /// <summary>
    /// 移动
    /// </summary>
    /// <param name="input">移动对象</param>
    /// <returns></returns>
    public Task MoveAsync(BaseCategoryMoveDto input);
}

/// <summary>
/// 基础的分类服务
/// </summary>
/// <typeparam name="TGetOutputDto">返回对象</typeparam>
/// <typeparam name="TGetListInput">分页查询对象</typeparam>
/// <typeparam name="TCreateInput">创建对象</typeparam>
public interface IBaseCategoryAppService<TGetOutputDto, TGetListInput, TCreateInput> :
    IBaseCategoryAppService<TGetOutputDto, TGetListInput, TCreateInput, TCreateInput>
    where TGetOutputDto : BaseCategoryDto<TGetOutputDto>
    where TGetListInput: BasePagedDto
    where TCreateInput : BaseCategoryCreateUpdateDto
{

}

/// <summary>
/// 基础的分类服务
/// </summary>
/// <typeparam name="TGetOutputDto">返回对象</typeparam>
/// <typeparam name="TCreateInput">创建对象</typeparam>
public interface IBaseCategoryAppService<TGetOutputDto, TCreateInput> :
    IBaseCategoryAppService<TGetOutputDto, BasePagedDto, TCreateInput>
    where TGetOutputDto : BaseCategoryDto<TGetOutputDto>
    where TCreateInput : BaseCategoryCreateUpdateDto
{

}


/// <summary>
/// 基础的分类服务
/// </summary>
/// <typeparam name="TGetOutputDto">返回对象</typeparam>
public interface IBaseCategoryAppService<TGetOutputDto> :
    IBaseCategoryAppService<TGetOutputDto, BaseCategoryCreateUpdateDto>
    where TGetOutputDto : BaseCategoryDto<TGetOutputDto>
{

}


